/**
 * 注意: 此文件中的 EnvManager 系统已迁移到 JSON 配置系统
 * 原有的 .env 文件操作已被 JSON 配置管理器替代
 * 如需测试配置功能，请使用 tests/integration/json-config-image-analysis.test.js
 */

// 测试环境设置
const path = require('path');
const fs = require('fs');
// EnvManager 已替换为 JSON 配置系统;
const { createLogger } = require('../logger');
const logger = createLogger('test-setup');
// EnvManager 实例已移除);

// 设置测试超时
jest.setTimeout(120000);

// 全局测试状态
let testConfig = {
    availableProviders: [],
    failedProviders: [],
    initialized: false
};

// 初始化测试环境（直接验证配置）
async function initializeTestEnvironment() {
    logger.test('加载测试环境配置...');

    // 验证API密钥有效性
    logger.test('验证API密钥有效性...');

    try {
        const TestInitializer = require('../test-initializer');
        const initializer = new TestInitializer(path.join(__dirname, '..'));
        const validation = await initializer.validateApiKeys();

        if (validation.requiresConfiguration) {
            console.error('\n❌ 没有检测到有效的API密钥配置');
            console.log('\n💡 请运行以下命令配置API密钥：');
            console.log('   npm run test:setup');
            console.log('   或者使用 Web 配置界面');
            process.exit(1);
        }

        testConfig.availableProviders = validation.availableProviders.map(p => p.name);
        testConfig.failedProviders = validation.failedProviders.map(p => p.name);
        testConfig.initialized = true;

        logger.success('测试环境准备完成!');
        logger.info(`可用服务商: ${testConfig.availableProviders.join(', ')}`);
        if (testConfig.failedProviders.length > 0) {
            logger.info(`跳过服务商: ${testConfig.failedProviders.join(', ')}`);
        }

    } catch (error) {
        console.error('❌ 配置验证失败:', error.message);
        console.log('\n💡 请先运行配置检查：npm run test:setup');
        process.exit(1);
    }
}

// 全局测试钩子
beforeAll(async () => {
    await initializeTestEnvironment();
    console.log('\n开始执行analyze.js功能测试...');
});

afterAll(() => {
    console.log('测试执行完成');
    // 清理可能残留的锁文件
    cleanupInitializationLock();
});

// 清理可能残留的初始化锁文件
function cleanupInitializationLock() {
    try {
        const fs = require('fs');
        const path = require('path');
        const lockFile = path.join(__dirname, '.test-init.lock');
        const pretestLockFile = path.join(__dirname, '.pretest-lock');
        const pretestResultFile = path.join(__dirname, '.pretest-result.json');

        [lockFile, pretestLockFile, pretestResultFile].forEach(file => {
            if (fs.existsSync(file)) {
                fs.unlinkSync(file);
            }
        });
    } catch (error) {
        console.warn('清理锁文件时出错:', error.message);
    }
}

// 导出测试配置供其他测试文件使用
global.testConfig = testConfig;